/*
 * Copyright (c) 2018-2999 北京小象智慧信息科技有限公司 All rights reserved.
 *
 * https://www.xiaoxiangai.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.dao;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.shop.bean.app.dto.ProductDto;
import com.yami.shop.bean.app.dto.TagProductDto;
import com.yami.shop.bean.dto.SearchProdDto;
import com.yami.shop.common.util.PageAdapter;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import com.yami.shop.bean.model.Product;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.web.bind.annotation.PostMapping;

public interface ProductMapper extends BaseMapper<Product> {

    int updateStocks(@Param("prod") Product product);

    Product getProductByProdNameAndShopId(@Param("prodName") String prodName, @Param("shopId") Long shopId);

    void returnStock(@Param("prodCollect") Map<Long, Integer> prodCollect);

    IPage<ProductDto> pageByPutawayTime(IPage<ProductDto> page);

    IPage<ProductDto> pageByNewProd(IPage<ProductDto> page,@Param("shopId") Long shopId);

    IPage<ProductDto> pageByTagId(Page<ProductDto> page, @Param("tagId") Long tagId);

    IPage<ProductDto> moreBuyProdList(Page<ProductDto> page);

    IPage<ProductDto> moreByNewProd(Page<ProductDto> page,@Param("shopId") Long shopId);

    IPage<ProductDto> pageByCategoryId(Page<ProductDto> page, @Param("categoryId") Long categoryId,@Param("shopId") Long shopId);

    List<Product> getCouponShop(Long shopId);

    List<Product> listProdByCategoryId(@Param("categoryId") Long categoryId);

    IPage<SearchProdDto> getSearchProdDtoPageByProdName(Page page, @Param("prodName") String prodName, @Param("sort") Integer sort, @Param("orderBy") Integer orderBy,@Param("shopId") Long shopId);

    TagProductDto tagProdList(@Param("tagId") Long tagId);

    List<TagProductDto> tagProdList();

    /**
     * 查看店铺的所有活动商品
     */
    IPage<ProductDto> listByShopId(@Param("page") PageParam<ProductDto> page, @Param("shopId") Long shopId);

    /**
     * 通过优惠券适用商品类型、优惠券id、店铺id获取商品列表
     */
    IPage<ProductDto> listBySuitableProdTypeAndCouponIdAndShopId(@Param("page") PageParam<ProductDto> page, @Param("shopId") Long shopId, @Param("suitableProdType") Integer suitableProdType, @Param("couponId") Long couponId);

    /**
     * 获取用户的收藏商品列表
     *
     * @param userId
     * @return
     */
    IPage<ProductDto> collectionProds(@Param("page") PageParam page, @Param("userId") String userId);

    List<Product> getAllProduct(Long shopId);

    List<Product> getProductByShopId(Long shopId);

    List<Product> selectProductByShopId(Long shopId);

    List<Product> getAllSpread(Long shopId);

    /**
     * 获取产品佣金
     */
    String getRebateMoney(@Param("prodId")String prodId);

    void deleteProductByShopId(@Param("shopId")Long shopId);

    /**
     * 获取未参加活动的商品
     */
    List<Product> getActivityPro(@Param("shopId")Long shopId);

    /**
     * 获取活动商品列表
     */
    IPage<ProductDto> pageByActivity(Page<ProductDto> page,@Param("shopId") Long shopId);

    /**
     * 判断当前店铺有没有该商品
     */
    Product  getProdByProdName(@Param("prodName")String prodName,@Param("shopId")Long shopId);

    /**
     * 获取当前有活动的商品,活动时间已经过期
     */
    Product getActivityProd(@Param("prodId")Long prodId);

    /**
     * 根据ID查询产品
     */
    Product getProdcut(@Param("prodId")Long prodId);

    /**
     * 查询当月商品销售数量
     */
    int getSalesNumber(@Param("prodId")Long prodId);

    /**
     * 根据类型查询线下销售的商品
     */
    List<Product> getProductByCategoryId(@Param("page") PageAdapter page,@Param("shopId")Long shopId,@Param("categoryId")Long categoryId);

    /**
     * 根据条件搜索商品列表
     */
    List<Product> getProductListBySearchField(@Param("shopId")Long shopId,@Param("searchField")String searchField);

    List<Product> getProductList(Product product);

    /**
     * 根据barCode码查询商品信息
     */
    Product getProductByBarCode(Product product);

    /**
     * 获取对应类型下的商品总数
     */
    int getProductNumber(@Param("page") PageAdapter page, @Param("shopId")Long shopId, @Param("categoryId")Long categoryId);

}
